const piles = [3, 6, 7, 11] //香蕉
// console.log(piles[0]);

/**
 * @author cfw
 * @func 是否能吃完所有香蕉
 * @param {number[]} piles 香蕉数组
 * @param {number} H 最大时间
 * @param {number} mid 最小时间
 * @return {bollean}
 */
function canEatAllBananas (piles, H, mid) {
  let h = 0; //吃完花的时间
  for (let j = 0; j < piles.length; j++) {
    h = h + Math.ceil(piles[j] / mid);
  }
  return h <= H;
}
/**
 * 
 * @param {number[]} piles 
 * @param {number} H 
 * @return {number}
 */
function minEatingSpeed(piles, H) {
  // 一个个试
  let lo = 1,//最小值
    hi = Math.max(...piles); //最大值
  //得到数组中的最大值， 吃法的约束
  // for (let i = 0; i < piles.length; i++) {
  //   if (piles[i] > lo) {
  //     hi = piles[i];
  //   } 
  // }
  // lo -> hi 去试， 最小的能吃完的是不是就这个值？ 
//   for (let i = lo; i <= hi; i++) {
//     if (canEatAllBananas(piles, H, i)) {
//       return i;
//     }
//   }
while(lo<=hi){
    let mid=lo+((hi-lo)>>1); //位移运算，二进制往右移一位，等于除以二
    if (canEatAllBananas(piles, H, mid)) {
        hi=mid-1;
    }else{
        lo=mid+1;
    }
}
  // console.log(hi, '-----')

  return lo;
}

console.log(minEatingSpeed(piles, 8));
